package com.yzy.fly;

import com.google.common.collect.Maps;

import java.util.Map;
import java.util.Set;

public class FlyEnvMap {

    private static volatile FlyEnvMap instance;
    private static Map<String, Object> pool;

    private FlyEnvMap() {
        pool = Maps.newHashMapWithExpectedSize(10);
    }

    /*
     * 单例模式有两种类型
     * 懒汉式：在真正需要使用对象时才去创建该单例类对象
     * 饿汉式：在类加载时已经创建好该单例对象，等待被程序使用
     */
    // 懒汉式单例模式
    public static FlyEnvMap getInstance() {
        if (instance == null) {// 线程A和线程B同时看到cacheSingletonUtil = null，如果不为null，则直接返回cacheSingletonUtil
            synchronized (FlyEnvMap.class) {// 线程A或线程B获得该锁进行初始化
                if (instance == null) {// 其中一个线程进入该分支，另外一个线程则不会进入该分支
                    instance = new FlyEnvMap();
                }
            }
        }
        return instance;
    }

    /**
     * * 添加到内存
     */
    public void add(String key, Object obj) {
        pool.put(key, obj);
    }

    /**
     * * 从内存中取出
     */
    public <T> T get(String key) {
        return (T)pool.get(key);
    }

    /**
     * * 从内存中清除
     */
    public void remove(String key) {
        pool.remove(key);
    }

    public Set<String> keys() {
        return pool.keySet();
    }


}
